regex正则表达式的基本语法学习

regex正则表达式的基本语法学习


regex学习网站https://regexlearn.com/zh-cn/learn


一.基本匹配

[]匹配括号内所有的字符

[^]匹配除了括号内的所有字符

[a-z]匹配在一个字符串中a到z之间的所有字符,字母换成数字也是可以的

.匹配任意字符

二.重复

*在一个字符后面加上*,表示该字符完全不去匹配或者可以多次匹配,等价于{0,}

+在一个字符后面加上+,表示该字符可以出现一次或者多次,这跟*有些区别,等价于{1,}

?在一个字符后面加上?,表示该字符可有可无,以此进行匹配,等价于{0,1}

{}在一个字符后面加上这个大括号,括号里面填的是数字,表示该字符重复出现的确切次数,以此来匹配

{2,3}括号的用法和上面一样,但是里面加了一个区间

意思是匹配该字符重复出现2到3次的字符串

如果不写右端点,如{2,}表示选择那些至少重复出现2次该字符的字符串

组合运用

[0-9]{4}这个意思是在单个数字0至9的范围内,连续匹配4次

[0-9]{2,}这个意思是在单个数字0至9的范围内,连续匹配至少2次

三.分组

()括号分组

\1表示引用组,数字表示分组的顺序

|竖线使一个表达式包含多个不同的分支,比如,(c|r)at|dog表示匹配cat rat dog

\转义字符,有时候我们希望显示符号本身,但是直接使用的话就是发挥它的正则表达作用,我们可以在要显示的符号前面加上\

^匹配字符串的开始,仅查找行首的字符

$匹配字符串的结束,仅查找行末的字符

\w查找字母、数字、下划线

\W查找除字母、数字、下划线以外的字符

\d仅匹配数字

\D匹配除数字之外的字符

\s仅匹配空白符

\S匹配空白符以外的字符

四.零宽断言

(?=PM)Positive Lookahead Assertion正向先行断言,先找到PM字符串,再取PM前面的字符

(?!)Negative Lookahead Assertion负向先行断言,匹配除了PM前面的字符以外的字符,同上功能相反

(?<=PM)Positive Lookbehind Assertion正向后行断言,先找到

(?<!)Negative Lookbehind Assertion负向后行断言

这部分内容的语法有点难以理解和记忆,在这里可以去分析它们的结构

()是一个分组,与其它部分区分开来

?定义关键字,告诉Regex引擎这是一个断言

<意味着它是后行的,当作一个形容词修饰词使用,没有它时默认先行

=意味着它是一个正向语句

!意味着它是一个负向语句

五.标志(修饰符)

/示例语句/双斜杆里面放Regex语句,在第二个斜杠后面添加标志

gGlobal全局匹配,匹配所有符合条件的项,而不仅仅找到一个

mMultiline多行模式,不只匹配一行,而是每行都去检查

iInsensitive对大小写不再敏感,不区分大小写

六.匹配长度控制

.*r贪婪匹配,先找到r,再看看r前面的字符,不仅匹配所有字符,还要尽可能的去多次匹配,产生的效果就是匹配无限长的字符

.*?r懒惰匹配,先找到r,再看看r前面的字符,然后仅匹配一次且只匹配找的第一个

七.基础通关!

进阶 用于SEO(Search Engine Optimization,搜索引擎优化)的一部分Regex语法

.*任何

.*buy.*找到所有包含buy的字符串内容

^http[^s].*意思是找到以http为开头的无限长字符串

^.{35}$^$限制开头和结尾,在该区域内只能有35个字符,以此匹配

其中{}也可以写成{1,35}{35,}等合法的形式进一步去限制字符长度

/*.pdf$中的/用于在文件路径中分割目录和文件名,*表示该文件名中可以有任意数量的字符,.pdf匹配pdf格式的文件,$匹配字符串的结尾

思考

在学长的督促下学习了Regex的基本知识,虽然还不知道这些以后会有多大用处,但通过在这块内容的学习还是解决了以前的一些困惑

以前经常见到奇怪的符号组合进而产生特殊的效果,在使用一些搜索引擎和软件Everything的搜索时经常看到正则表达式搜索模式,曾经还不清楚这是什么东西什么意思

现在至少理解了它是一个什么样子的工具,减少了知识盲区